package com.zjkj.mp.utils.security;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

/**
 * 
 * 日志工具类
 *
 * @author 100160
 * @history
 * <TABLE id="HistoryTable" border="1">
 * 	<TR><TD>时间</TD><TD>描述</TD><TD>作者</TD></TR>
 *	<TR><TD>2013-6-19</TD><TD>创建初始版本</TD><TD>100160</TD></TR>
 * </TABLE>
 */
public class SendLogUtils {
	// 定义日志输出级别
	public static final int DEBUG = Level.DEBUG_INT;
	public static final int INFO = Level.INFO_INT;
	public static final int WARN = Level.WARN_INT;
	public static final int ERROR = Level.ERROR_INT;

	private Logger logger = null;
	private StringBuffer logs = null;

	/**
	 * 初始化 <code>SendLogUtil.java</code> 新实例。
	 */
	private SendLogUtils() {
		logger = Logger.getLogger(this.getClass());
		logs = new StringBuffer();
	}

	/**
	 * 获得日志记录器
	 * @return
	 */
	public static SendLogUtils getLogger() {
		return new SendLogUtils();
	}

	/**
	 * 添加日志内容
	 * 
	 * @param log 日志内容
	 * @return
	 */
	public SendLogUtils appendLog(String log) {
		logs.append("\r\n");
		logs.append(log);
		return this;
	}

	/**
	 * 使用默认设置记录日志
	 */
	public void log() {
		logger.debug(formatLogs());
	}

	/**
	 * 自定义设置记录日志
	 * 
	 * @param logger
	 *            日志记录器 为NULL时使用默认记录器
	 * @param level
	 *            日志记录级别 为NULL时使用默认级别-DEBUG
	 * @param formatter
	 *            日志格式化类 为NULL时使用默认格式
	 */
	public void log(Logger logger, int level, SendLogFormatter formatter) {
		String msg = "";
		if (null == logger) {
			logger = this.logger;
		}
		if (null != formatter) {
			msg = formatter.formatLog(logs);
		} else {
			msg = formatLogs();
		}
		switch (level) {
		case ERROR:
			logger.error(msg);
			break;
		case WARN:
			logger.warn(msg);
			break;
		case INFO:
			logger.info(msg);
			break;
		case DEBUG:
			logger.debug(msg);
			break;
		default:
			logger.debug(msg);
			break;
		}
	}
	
	/**
	 * 默认日志内容格式化方法
	 * @return
	 */
	private String formatLogs() {
		logs.insert(
				0,
				"\r\n----------------------------------------------------------------------------------->日志输出开始");
		logs.append("\r\n----------------------------------------------------------------------------------->日志输出结束");
		return logs.toString();
	}
}

/**
 * Copyright © 2013,指尖科技 All rights reserved.
 */
